Time synchronization between interconnected nodes in a network is often important to operation of the nodes. Time synchronization typically involves sharing time synchronization messages between the nodes so that nodes (often called slave nodes) may synchronize their own clocks in accordance with the clock of a node that has been designated the master node. For example, a master node sends a time synchronization message to a slave node at a first time indicated by a timestamp T1. The slave node receives the time synchronization message including the timestamp T1 and notes the local time T1′ when the message is received. The slave node calculates a network transit time, which is the time it takes for the time synchronization message to travel from the slave node to the master node, by sending a message to the master node at a time T2. The master node receives this message at a time T2′ and sends a message back to the slave node including the timestamp T2′. Based on T1, T1′, T2 and T2′, the slave node calculates an offset between the clock of the master node and the clock of the slave node. The slave node may use the offset information to adjust its local clock into agreement with the clock of the master node. Fluctuations in the delay of the network, jitter or noise often affects the accuracy of a timestamp included in a time synchronization message, such that time synchronization is sometimes inaccurate between the master and slave nodes.